﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SIGEB.Prototipo.Control;
using SIGEB.Modelo.moduloUsuarios;
using SIGEB.Modelo.moduloPrestamos;
using bibliotecaObservador;
using SIGEB.Modelo;
using SIGEB.Modelo.moduloPerfiles;

namespace SIGEB.Prototipo.Vista.moduloUsuarios
{
    public partial class form_Prestamos : frm_ModuloBase
    {
        #region "constructores"

        public form_Prestamos(controlPrincipal cp)
            : base(cp)
        {
            InitializeComponent();
        }

        #endregion

        #region "eventos"

        public override void hacerVisible(object[] arg)
        {
            cargarDatosUsuarios();
            if (arg != null && arg[0] != null)
            {
                try
                {
                    string nuevoCodUsuario = (string)arg[0];
                    actualizarUsuarioActual(nuevoCodUsuario);
                }
                catch { }

            }
            actualizarControles();
        }

        private void actualizarControles()
        {
            actualizarBotones();
        }

        private void actualizarBotones()
        {
            btn_eliminar.Enabled = prestamoActual != null;
            btn_eliminar.Visible = cp.usuarioActualPuede(acciones.PRESTA_DEVOLVER);
            //btn_usuario.Enabled=cp.usuarioActualPuede(
        }

        public override void actualizar(object referencia, EventoActualizacion e)
        {
            int num = (int)referencia;
            if (num == conjuntoBase.CONJPRESTAMOS)
            {
                llenarActualizarPrestamos();
                actualizarControles();
            }
        }

        #endregion

        #region "metodos"

        private void actualizarUsuarioActual(string idNuevo)
        {
            userActual = null;
            if (usuariosActuales != null && !string.IsNullOrEmpty(idNuevo))
            {
                foreach (usuario act in usuariosActuales)
                {
                    if (act.idUsuario == idNuevo)
                    {
                        userActual = act;
                        txt_usuario.Text = act.idUsuario;
                        break;
                    }
                }
            }
            llenarActualizarPrestamos();
        }

        private void llenarActualizarPrestamos()
        {
            llenarColumnasDgvPrestamo();
            if (userActual != null)
            {
                try
                {
                    prestamosActuales = cp.ctrlPrestamo.prestamoUsuario(userActual.idUsuario);
                }
                catch (Exception ex)
                {
                    ventanaError(ex.Message);
                }
                if (prestamosActuales != null)
                {
                    foreach (prestamo act in prestamosActuales)
                    {
                        dgv_busqueda.Rows.Add(act.codPrestamo, act.getEstado(), act.fechaDevolucion.ToShortDateString(), act.ejemplarP);                                                                         
                    }
                }
            }
        }

        private void llenarColumnasDgvPrestamo()
        {
            dgv_busqueda.Columns.Clear();
            dgv_busqueda.Columns.Add("Id", "Id");
            dgv_busqueda.Columns[0].Visible = false;
            dgv_busqueda.Columns.Add("Estado", "Estado");
            dgv_busqueda.Columns.Add("Vence", "Vencimiento");
            //dgv_busqueda.Columns.Add("Documento", "Documento");
            dgv_busqueda.Columns.Add("Adquisicion", "Adquisición");
        }

        private void cargarDatosUsuarios()
        {
            usuariosActuales = cp.ctrlUsuario.todosUsuarios();
        }

        private void eliminarReserva()
        {
            if (prestamoActual != null)
            {
                try
                {
                    
                }
                catch (Exception e)
                {
                    mostrarInfo(e.Message);
                }
            }
        }

        private prestamo getPrestamoSelected()
        {
            try
            {
                dgv_busqueda.Rows[dgv_busqueda.SelectedCells[0].RowIndex].Selected = true;
                String cod = dgv_busqueda.SelectedRows[0].Cells[0].Value.ToString();
                return controlPrestamo.buscarPrestamos(prestamosActuales, cod);
            }
            catch
            {
                return null;
            }
        }

        private void actualizarPrestamoActual()
        {
            prestamoActual = getPrestamoSelected();
            actualizarControles();
        }

        #endregion

        #region "atributos"

        LinkedList<usuario> usuariosActuales;
        usuario userActual;

        LinkedList<prestamo> prestamosActuales;
        prestamo prestamoActual;

        #endregion

        private void dgv_busqueda_SelectionChanged(object sender, EventArgs e)
        {
            actualizarPrestamoActual();
        }

        private void btn_eliminar_Click(object sender, EventArgs e)
        {
            eliminarReserva();
        }

        private void btn_usuario_Click(object sender, EventArgs e)
        {
            objetoReturn r = new objetoReturn();
            new busquedaUsuario(usuariosActuales, r).ShowDialog();
            if (!string.IsNullOrEmpty(r.objeto))
            {
                actualizarUsuarioActual(r.objeto);
            }
        }
    }
}
